/**
* \brief Multimethod implementation 
*	 with 'Visitor' design pattern.
*	 Header file with auxilliary classes - Figure.
* \author Bartosz Kedra (bartosz.kedra@gmail.com)
*/
#ifndef __FIGURE_HPP__
#define __FIGURE_HPP__


class Circle;
class Rectangle;
class Visitor;

class Figure
{
public:
	virtual void accept(Visitor &v) = 0;
	virtual double intersect(Circle& c) = 0;
	virtual double intersect(Rectangle& r) = 0;
};

class Circle : public Figure
{
public:
	virtual void accept(Visitor &v);
	virtual double intersect(Circle& c); 
	virtual double intersect(Rectangle& r);
};

class Rectangle : public Figure
{
public:
	virtual void accept(Visitor &v);
	virtual double intersect(Circle& c); 
	virtual double intersect(Rectangle& r);
};

#endif /* __FIGURE_HPP__ */


